﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ch01
{
    public partial class Form11 : Form
    {
        //创建一个随机数对象
        Random rand = new Random();

        //定义变量保存正确数、错误数、字符总个数
        int right = 0, wrong = 0, count = 0;

        void show()
        {
            lbl_msg.Text = "总个数：" + count + "，正确：" + right + "，错误：" + wrong;
        }

        //定义一个生成随机字母的方法
        void randChar()
        {
            //随机生成一个横坐标
            int x = rand.Next(Size.Width-60);
            //随机生成一个纵坐标
            int y = rand.Next(Size.Height-160);

            //创建一个Label标签用于放英文字母
            Label lbl = new Label();
            //在Label设置英文字母
            lbl.Text = (char)rand.Next(65, 91) + "";
            //设置自动大小
            lbl.AutoSize = true;
            //设置字体大小
            lbl.Font = new Font("楷体", 36);
            //设置出现的位置
            lbl.Location = new Point(x, y);
            //将Label放入窗体中
            panel1.Controls.Add(lbl);
            //生成一个，计数加1
            count++;
            //显示正确率
            show();
        }
        
        public Form11()
        {
            InitializeComponent();
        }

        private void Form11_Load(object sender, EventArgs e)
        {
            //调用randChar方法生成一个随机的英文字母
            //randChar();

            foreach (var item in this.Controls)
            {
                ((Control)item).KeyPress += new KeyPressEventHandler(Form11_KeyPress);
            }
        }
        //键盘按下事件
        private void Form11_KeyDown(object sender, KeyEventArgs e)
        {
            //在KeyDown事件里，无论是KeyValue、KeyCode、KeyData都不能区分大小写

            //KeyValue获取的是键盘上按下的键的编码
            //MessageBox.Show(e.KeyValue + "");

            //KeyCode获取的是键盘上按下的键的字符
            //MessageBox.Show(e.KeyCode + "");

            //KeyData跟KeyCode获取的是一样的值
            //MessageBox.Show(e.KeyData + "");

        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            panel1.Controls.Clear();
            count = right = wrong = 0;
            show();
        }

        //键盘按键的整个过程的事件
        private void Form11_KeyPress(object sender, KeyPressEventArgs e)
        {
            //在KeyPress中获取KeyChar值是可以区分大小写的
            //以及KeyChar是无法获取功能键的
            //MessageBox.Show(e.KeyChar + "");

            //获取用户按的是哪个键
            string key = e.KeyChar.ToString();

            int i;
            for (i = 0; i < panel1.Controls.Count; i++)
            {
                Label lbl = null;
                if (panel1.Controls[i] is Label)
                {
                    lbl = (Label)panel1.Controls[i];
                }
                else
                {
                    continue;
                }
                //用获取的按钮跟标签上的字母比较
                if (key == lbl.Text)
                {
                    //输入正确，把标签消掉
                    panel1.Controls.Remove(panel1.Controls[i]);
                    //正确计数加1
                    right++;
                    //显示正确率
                    show();
                    //推出循环
                    break;
                }
            }
            if (i == panel1.Controls.Count)
            {
                //错误计数加1
                wrong++;
                //显示正确率
                show();
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //生成随机字母
            randChar();
        }
    }
}
